devhub-dev-parallel-test-results.html

Report generated on 08-Jul-2024 at 14:47:38 by pytest-html v3.1.1

Summary

62 tests ran in 1049.81 seconds.

51 passed, 1 skipped, 11 failed, 8 errors, 0 expected failures, 0 unexpected passes, 0 rerun

Results

Result Test Duration Links
Error tests/devhub/test_addon_edit.py::test_set_addon_invisible_tc_id_c4371[Desktop]::setup 46.69
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="339cf07e-2919-470a-aa57-a1df6973858f")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_set_addon_invisible_tc_id_c4371[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="339cf07e-2919-470a-aa57-a1df6973858f")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107c3ee80>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Error tests/devhub/test_addon_validate.py::test_validate_addon_listed[Desktop]::setup 42.60
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="b2b38bda-74c5-466f-bced-e44f7dbc48ae")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_validate_addon_listed[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="b2b38bda-74c5-466f-bced-e44f7dbc48ae")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107bdb6a0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Error tests/devhub/test_addon_validate.py::test_validate_addon_unlisted[Desktop]::setup 44.09
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="255a2175-8454-4b6a-ad5f-39f0a36ff39e")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_validate_addon_unlisted[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="255a2175-8454-4b6a-ad5f-39f0a36ff39e")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107cce700>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Error tests/devhub/test_addon_validate.py::test_validate_unlisted_addon_option_no_manifest_found[Desktop]::setup 42.54
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="0bd1b25c-0519-4aac-93fa-a7e126245f34")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_validate_unlisted_addon_option_no_manifest_found[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="0bd1b25c-0519-4aac-93fa-a7e126245f34")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107ccf240>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Error tests/devhub/test_addon_validate.py::test_validate_unlisted_addon_option_unsupported_format[Desktop]::setup 41.89
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="59bbf6a6-5692-428b-9583-6cc0c2b9dc1a")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_validate_unlisted_addon_option_unsupported_format[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="59bbf6a6-5692-428b-9583-6cc0c2b9dc1a")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107cfc5e0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Error tests/devhub/test_devhub_home.py::test_devhub_login[Desktop]::setup 41.70
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="797c6fc9-7c99-4988-baca-1f34a7fcc13f")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_devhub_login[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="797c6fc9-7c99-4988-baca-1f34a7fcc13f")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107cfe700>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Error tests/devhub/test_devhub_home.py::test_devhub_click_my_addons_header_link[Desktop]::setup 41.48
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="bea885b6-e164-43a0-9e82-01e405208b1a")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_devhub_click_my_addons_header_link[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="bea885b6-e164-43a0-9e82-01e405208b1a")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107ccff60>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Error tests/devhub/test_devhub_home.py::test_devhub_resources_write_some_code[Desktop]::setup 41.67
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="b2f23093-4798-4c1b-b6c4-3062d75aee31")>, base_url = 'https://addons-dev.allizom.org', session_auth = None
request = <SubRequest 'selenium' for <Function test_devhub_resources_write_some_code[Desktop]>>

@pytest.fixture(
scope="function",
params=[DESKTOP],
ids=["Desktop"],
)
def selenium(selenium, base_url, session_auth, request):
"""Fixture to set a custom resolution for tests running on Desktop
and handle browser sessions when needed"""
selenium.set_window_size(*request.param)
# establishing actions based on markers
create_session = request.node.get_closest_marker("create_session")
login = request.node.get_closest_marker("login")
clear_session = request.node.get_closest_marker("clear_session")
# this is used when we want to open an AMO page with a sessionid
# cookie (i.e. a logged-in user) already set
if create_session:
# need to set the url context if we want to apply a cookie
# in order to avoid InvalidCookieDomainException error
selenium.get(base_url)
# set the sessionid cookie
selenium.add_cookie(
{
"name": "sessionid",
"value": session_auth,
}
)
# this is used when we want to start the browser with a normal login
# mostly used for the scope of getting the session cookie and storing it for later use
if login:
home = Home(selenium, base_url).open().wait_for_page_to_load()
home.header.click_login()
home.wait.until(
EC.visibility_of_element_located((By.NAME, "email")),
message=f"FxA email input field was not displayed in {selenium.current_url}",
)
user = login.args[0]
> Login(selenium, base_url).account(user)

tests/conftest.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/frontend/login.py:88: in account
self.fxa_login(
pages/desktop/frontend/login.py:189: in fxa_login
self.wait.until(EC.visibility_of_element_located(self._2fa_input_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="b2f23093-4798-4c1b-b6c4-3062d75aee31")>, method = <function visibility_of_element_located.<locals>._predicate at 0x1080ff740>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
-----------------------------Captured stdout setup------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Failed tests/devhub/test_addon_edit.py::test_disable_enable_version_tc_id_c159074[Desktop] 16.56
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="fdef046b-31db-453c-bb81-f75c49928173")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x107c7b0d0>

@pytest.mark.create_session("developer")
def test_disable_enable_version_tc_id_c159074(selenium, base_url, variables, wait):
"""Check that developers cand disable and re-enable addon versions;
This test works with an addon having a single version submitted and Approved"""
selenium.get(f"{base_url}/developers/addon/disable_version_auto/versions")
> manage_version = ManageVersions(selenium, base_url).wait_for_page_to_load()

tests/devhub/test_addon_edit.py:48:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/manage_versions.py:67: in wait_for_page_to_load
self.wait.until(EC.visibility_of_element_located(self._version_list_locator))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="fdef046b-31db-453c-bb81-f75c49928173")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107bda7a0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_addon_validate.py::test_validate_listed_addon_option_no_manifest_found[Desktop] 40.79
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="a88c3d27-4aab-4b5e-aa9f-7c5cf03bd782")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x107bab3d0>

@pytest.mark.sanity
@pytest.mark.create_session("developer")
def test_validate_listed_addon_option_no_manifest_found(
selenium, base_url, variables, wait
):
DevHubHome(selenium, base_url).open().wait_for_page_to_load()
"""Go to Devhub Addon Validate page"""
devhub_addon_validate = (
> DevhubAddonValidate(selenium, base_url).open().wait_for_page_to_load()
)

tests/devhub/test_addon_validate.py:44:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
venv/lib/python3.11/site-packages/pypom/page.py:131: in open
self.wait_for_page_to_load()
pages/desktop/developers/devhub_addon_validate.py:43: in wait_for_page_to_load
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="a88c3d27-4aab-4b5e-aa9f-7c5cf03bd782")>, method = <function DevhubAddonValidate.wait_for_page_to_load.<locals>.<lambda> at 0x107ccc7c0>
message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_addon_validate.py::test_validate_listed_addon_option_unsupported_format[Desktop] 37.62
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="df59d534-712d-4804-a788-64865992ae16")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x107b196d0>

@pytest.mark.sanity
@pytest.mark.create_session("developer")
def test_validate_listed_addon_option_unsupported_format(
selenium, base_url, variables, wait
):
DevHubHome(selenium, base_url).open().wait_for_page_to_load()
"""Go to Devhub Addon Validate page"""
devhub_addon_validate = (
> DevhubAddonValidate(selenium, base_url).open().wait_for_page_to_load()
)

tests/devhub/test_addon_validate.py:69:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
venv/lib/python3.11/site-packages/pypom/page.py:131: in open
self.wait_for_page_to_load()
pages/desktop/developers/devhub_addon_validate.py:43: in wait_for_page_to_load
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="df59d534-712d-4804-a788-64865992ae16")>, method = <function DevhubAddonValidate.wait_for_page_to_load.<locals>.<lambda> at 0x107ccca40>
message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_click_header_profile_icon[Desktop] 35.61
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="00f4677e-b0e0-47d0-8544-0341d24aa1fd")>, base_url = 'https://addons-dev.allizom.org'

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_click_header_profile_icon(selenium, base_url):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> user_profile = page.click_user_profile_picture()

tests/devhub/test_devhub_home.py:119:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:249: in click_user_profile_picture
icon = self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="00f4677e-b0e0-47d0-8544-0341d24aa1fd")>, method = <function element_to_be_clickable.<locals>._predicate at 0x107cfc220>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_my_addons_list_items[Desktop] 5.28
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="cfabf0a2-e436-458d-bd28-a65c347545ae")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x108090bd0>

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_my_addons_list_items(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
# check that logged-in users can see up to 3 latest addons they've submitted
> assert len(page.my_addons_list) in range(1, 4)
E assert 0 in range(1, 4)
E + where 0 = len([])
E + where [] = <pages.desktop.developers.devhub_home.DevHubHome object at 0x1080933d0>.my_addons_list
E + and range(1, 4) = range(1, 4)

tests/devhub/test_devhub_home.py:156: AssertionError
Failed tests/devhub/test_devhub_home.py::test_devhub_click_see_all_addons_link[Desktop] 35.76
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="791f7cf7-2db7-49ea-afeb-bb130f696bad")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x108070e90>

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_click_see_all_addons_link(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> my_addons_page = page.click_see_all_addons_link()

tests/devhub/test_devhub_home.py:187:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:289: in click_see_all_addons_link
self.wait_for_element_to_be_clickable(self._submit_addon_button_locator)
pages/desktop/base.py:46: in wait_for_element_to_be_clickable
self.wait.until(EC.element_to_be_clickable(element))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="791f7cf7-2db7-49ea-afeb-bb130f696bad")>, method = <function element_to_be_clickable.<locals>._predicate at 0x107cff1a0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_click_submit_new_addon_button_tc_id_c14882[Desktop] 36.53
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="2573583d-6c43-4f56-897f-aa025eaef80f")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x1080cfe90>

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_click_submit_new_addon_button_tc_id_c14882(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> distribution_page = page.click_submit_addon_button()

tests/devhub/test_devhub_home.py:198:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:294: in click_submit_addon_button
self.wait_for_element_to_be_clickable(self._submit_addon_button_locator)
pages/desktop/base.py:46: in wait_for_element_to_be_clickable
self.wait.until(EC.element_to_be_clickable(element))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="2573583d-6c43-4f56-897f-aa025eaef80f")>, method = <function element_to_be_clickable.<locals>._predicate at 0x1080fd080>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_click_submit_new_theme_button[Desktop] 5.81
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="45699d16-41d9-4fb0-b5b5-258b6ee09104")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x1082e3010>

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_click_submit_new_theme_button(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> distribution_page = page.click_submit_theme_button()

tests/devhub/test_devhub_home.py:209:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:299: in click_submit_theme_button
self.find_element(*self._submit_theme_button_locator).click()
venv/lib/python3.11/site-packages/pypom/view.py:34: in find_element
return self.driver_adapter.find_element(strategy, locator)
venv/lib/python3.11/site-packages/pypom/selenium_driver.py:61: in find_element
return self.driver.find_element(strategy, locator)
venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:856: in find_element
return self.execute(Command.FIND_ELEMENT, {
venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py:429: in execute
self.error_handler.check_response(response)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x1082e1910>
response = {'status': 404, 'value': '{"value":{"error":"no such element","message":"Unable to locate element: .DevHub-MyAddons .B.../content/shared/webdriver/Errors.sys.mjs:511:5\\ndom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16\\n"}}'}

def check_response(self, response: Dict[str, Any]) -> None:
"""
Checks that a JSON response from the WebDriver does not have an error.

:Args:
- response - The JSON response from the WebDriver server as a dictionary
object.

:Raises: If the response contains an error message.
"""
status = response.get('status', None)
if not status or status == ErrorCode.SUCCESS:
return
value = None
message = response.get("message", "")
screen: str = response.get("screen", "")
stacktrace = None
if isinstance(status, int):
value_json = response.get('value', None)
if value_json and isinstance(value_json, str):
import json
try:
value = json.loads(value_json)
if len(value.keys()) == 1:
value = value['value']
status = value.get('error', None)
if not status:
status = value.get("status", ErrorCode.UNKNOWN_ERROR)
message = value.get("value") or value.get("message")
if not isinstance(message, str):
value = message
message = message.get('message')
else:
message = value.get('message', None)
except ValueError:
pass

exception_class: Type[WebDriverException]
if status in ErrorCode.NO_SUCH_ELEMENT:
exception_class = NoSuchElementException
elif status in ErrorCode.NO_SUCH_FRAME:
exception_class = NoSuchFrameException
elif status in ErrorCode.NO_SUCH_SHADOW_ROOT:
exception_class = NoSuchShadowRootException
elif status in ErrorCode.NO_SUCH_WINDOW:
exception_class = NoSuchWindowException
elif status in ErrorCode.STALE_ELEMENT_REFERENCE:
exception_class = StaleElementReferenceException
elif status in ErrorCode.ELEMENT_NOT_VISIBLE:
exception_class = ElementNotVisibleException
elif status in ErrorCode.INVALID_ELEMENT_STATE:
exception_class = InvalidElementStateException
elif status in ErrorCode.INVALID_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR \
or status in ErrorCode.INVALID_XPATH_SELECTOR_RETURN_TYPER:
exception_class = InvalidSelectorException
elif status in ErrorCode.ELEMENT_IS_NOT_SELECTABLE:
exception_class = ElementNotSelectableException
elif status in ErrorCode.ELEMENT_NOT_INTERACTABLE:
exception_class = ElementNotInteractableException
elif status in ErrorCode.INVALID_COOKIE_DOMAIN:
exception_class = InvalidCookieDomainException
elif status in ErrorCode.UNABLE_TO_SET_COOKIE:
exception_class = UnableToSetCookieException
elif status in ErrorCode.TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.SCRIPT_TIMEOUT:
exception_class = TimeoutException
elif status in ErrorCode.UNKNOWN_ERROR:
exception_class = WebDriverException
elif status in ErrorCode.UNEXPECTED_ALERT_OPEN:
exception_class = UnexpectedAlertPresentException
elif status in ErrorCode.NO_ALERT_OPEN:
exception_class = NoAlertPresentException
elif status in ErrorCode.IME_NOT_AVAILABLE:
exception_class = ImeNotAvailableException
elif status in ErrorCode.IME_ENGINE_ACTIVATION_FAILED:
exception_class = ImeActivationFailedException
elif status in ErrorCode.MOVE_TARGET_OUT_OF_BOUNDS:
exception_class = MoveTargetOutOfBoundsException
elif status in ErrorCode.JAVASCRIPT_ERROR:
exception_class = JavascriptException
elif status in ErrorCode.SESSION_NOT_CREATED:
exception_class = SessionNotCreatedException
elif status in ErrorCode.INVALID_ARGUMENT:
exception_class = InvalidArgumentException
elif status in ErrorCode.NO_SUCH_COOKIE:
exception_class = NoSuchCookieException
elif status in ErrorCode.UNABLE_TO_CAPTURE_SCREEN:
exception_class = ScreenshotException
elif status in ErrorCode.ELEMENT_CLICK_INTERCEPTED:
exception_class = ElementClickInterceptedException
elif status in ErrorCode.INSECURE_CERTIFICATE:
exception_class = InsecureCertificateException
elif status in ErrorCode.INVALID_COORDINATES:
exception_class = InvalidCoordinatesException
elif status in ErrorCode.INVALID_SESSION_ID:
exception_class = InvalidSessionIdException
elif status in ErrorCode.UNKNOWN_METHOD:
exception_class = UnknownMethodException
else:
exception_class = WebDriverException
if not value:
value = response['value']
if isinstance(value, str):
raise exception_class(value)
if message == "" and 'message' in value:
message = value['message']

screen = None # type: ignore[assignment]
if 'screen' in value:
screen = value['screen']

stacktrace = None
st_value = value.get('stackTrace') or value.get('stacktrace')
if st_value:
if isinstance(st_value, str):
stacktrace = st_value.split('\n')
else:
stacktrace = []
try:
for frame in st_value:
line = frame.get("lineNumber", "")
file = frame.get("fileName", "<anonymous>")
if line:
file = f"{file}:{line}"
meth = frame.get('methodName', '<anonymous>')
if 'className' in frame:
meth = "{}.{}".format(frame['className'], meth)
msg = " at %s (%s)"
msg = msg % (meth, file)
stacktrace.append(msg)
except TypeError:
pass
if exception_class == UnexpectedAlertPresentException:
alert_text = None
if 'data' in value:
alert_text = value['data'].get('text')
elif 'alert' in value:
alert_text = value['alert'].get('text')
raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .DevHub-MyAddons .Button:nth-of-type(2)
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py:243: NoSuchElementException
Failed tests/devhub/test_devhub_home.py::test_devhub_resources_footer_tools_links_tc_id_C15072[Desktop] 35.69
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="9a4dfc31-dc69-47d1-bf70-becd0dd78703")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_resources_footer_tools_links_tc_id_C15072(selenium, base_url, variables):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> assert "Tools" in page.resources.tools_section_header

tests/devhub/test_devhub_home.py:257:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:672: in tools_section_header
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="9a4dfc31-dc69-47d1-bf70-becd0dd78703")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107c3fa60>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_resources_footer_promote_links_tc_id_C15072[Desktop] 35.45
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="66b58407-2cbd-4b42-aa57-16fbe592f066")>, base_url = 'https://addons-dev.allizom.org'
variables = {'4mb_addon_slug': '4mb_addon_slug', 'addon_detail_guid': '{f2cd2fe0-0c62-40bd-8e28-2f4d7fc0ad43}', 'addon_detail_id':...dd-ons must comply with Mozilla’s Add-on Policies and are subject to manual review at any time after submission.', ...}

@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_resources_footer_promote_links_tc_id_C15072(selenium, base_url, variables):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
> assert "Promote" in page.resources.promote_section_header

tests/devhub/test_devhub_home.py:274:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:685: in promote_section_header
self.wait.until(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="66b58407-2cbd-4b42-aa57-16fbe592f066")>, method = <function visibility_of_element_located.<locals>._predicate at 0x107f9f740>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Failed tests/devhub/test_devhub_home.py::test_devhub_logout_tc_id_c15075[Desktop] 35.85
selenium = <selenium.webdriver.firefox.webdriver.WebDriver (session="9ba2aa33-dcec-4a31-be07-7bba22632305")>, base_url = 'https://addons-dev.allizom.org'
wait = <[AttributeError("'function' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x1083be710>

@pytest.mark.sanity
@pytest.mark.nondestructive
@pytest.mark.create_session("developer")
def test_devhub_logout_tc_id_c15075(selenium, base_url, wait):
page = DevHubHome(selenium, base_url).open().wait_for_page_to_load()
# page.devhub_login("developer")
> page.click_sign_out()

tests/devhub/test_devhub_home.py:599:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
pages/desktop/developers/devhub_home.py:166: in click_sign_out
self.sign_out_link.click()
pages/desktop/developers/devhub_home.py:162: in sign_out_link
self.wait_for_element_to_be_displayed(self._sign_out_link_locator)
pages/desktop/base.py:42: in wait_for_element_to_be_displayed
self.wait.until(EC.visibility_of_element_located(element))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <selenium.webdriver.support.wait.WebDriverWait (session="9ba2aa33-dcec-4a31-be07-7bba22632305")>, method = <function visibility_of_element_located.<locals>._predicate at 0x1080fede0>, message = ''

def until(self, method, message: str = ""):
"""Calls the method provided with the driver as an argument until the \
return value does not evaluate to ``False``.

:param method: callable(WebDriver)
:param message: optional message for :exc:`TimeoutException`
:returns: the result of the last call to `method`
:raises: :exc:`selenium.common.exceptions.TimeoutException` if timeout occurs
"""
screen = None
stacktrace = None

end_time = time.monotonic() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.monotonic() > end_time:
break
> raise TimeoutException(message, screen, stacktrace)
E selenium.common.exceptions.TimeoutException: Message:
E Stacktrace:
E RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
E WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:193:5
E NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:511:5
E dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16

venv/lib/python3.11/site-packages/selenium/webdriver/support/wait.py:90: TimeoutException
Skipped tests/devhub/test_devhub_home.py::test_verify_newsletter_signup_confirmation[Desktop] 0.00
('/Users/alexandru.schek/addons-release-tests/tests/devhub/test_devhub_home.py', 383, 'Skipped: Skipped until this issue is fixed: https://github.com/mozilla/addons-server/issues/21335')
Passed tests/devhub/test_devhub_home.py::test_devhub_logo[Desktop] 5.74
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_click_extension_workshop[Desktop] 7.02
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_click_documentation[Desktop] 6.26
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_click_support[Desktop] 7.54
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_click_blog[Desktop] 8.01
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_page_overview[Desktop] 7.07
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_page_content[Desktop] 5.50
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_content_login_link[Desktop] 6.42
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_page_get_involved[Desktop] 7.50
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_logged_in_page_hero_banner_tc_id_C15072[Desktop] 15.50
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Passed tests/devhub/test_devhub_home.py::test_devhub_my_addons_section_tc_id_C15072[Desktop] 14.47
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Passed tests/devhub/test_devhub_home.py::test_devhub_my_addons_list_approval_status[Desktop] 5.23
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_click_first_theme_button[Desktop] 16.26
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Passed tests/devhub/test_devhub_home.py::test_devhub_resources_footer_documentation_links_tc_id_C15072[Desktop] 18.60
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Passed tests/devhub/test_devhub_home.py::test_devhub_resources_participate[Desktop] 17.52
------------------------------Captured stdout call------------------------------
The "click continue button" event occurred. The script should be on the password input screen here. We should see "Sign in" in the header. The card header title is "Enter your password for your ⁨Mozilla account⁩"
Passed tests/devhub/test_devhub_home.py::test_page_connect_footer_twitter[Desktop-0-x.com] 7.56
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_page_connect_footer_twitter[Desktop-1-x.com] 7.64
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_page_connect_footer_more_links[Desktop-AMO Matrix channel] 9.01
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_page_connect_footer_more_links[Desktop-Mozilla Discourse] 8.93
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_connect_newsletter_section[Desktop] 5.92
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_mozilla_footer_link[Desktop] 6.51
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - About] 5.61
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Blog] 7.32
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Extension Workshop] 6.65
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Developer Hub] 5.56
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Developer Policies] 6.40
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Community Blog] 7.68
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Forum] 9.29
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Report a bug] 6.15
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_addons_footer_links[Desktop-DevHub Footer - Addons section - Review Guide] 5.73
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_browsers_footer_links[Desktop-DevHub Footer - Browsers section - Desktop] 5.75
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_browsers_footer_links[Desktop-DevHub Footer - Browsers section - Mobile] 5.64
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_browsers_footer_links[Desktop-DevHub Footer - Browsers section - Enterprise] 5.75
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Browsers] 5.73
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - VPN] 5.76
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Relay] 6.09
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Monitor] 7.44
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_products_footer_links[Desktop-DevHub Footer - Products section - Pocket] 7.10
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_social_footer_links[Desktop-DevHub Footer - Social section - Twitter] 6.77
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_social_footer_links[Desktop-DevHub Footer - Social section - Instagram] 5.90
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_social_footer_links[Desktop-DevHub Footer - Social section - YouTube] 5.74
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_legal_footer_links[Desktop-DevHub Footer - Legal section - Privacy] 5.24
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_legal_footer_links[Desktop-DevHub Footer - Legal section - Cookies] 5.32
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_legal_footer_links[Desktop-DevHub Footer - Legal section - Legal] 5.52
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub French Translation] 6.05
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub German Translation] 6.06
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub Chinese Translation] 6.23
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub Russian Translation] 6.16
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_change_devhub_language[Desktop-DevHub Hebrew Translation] 5.96
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_footer_copyright_message[Desktop-Legal] 6.64
No log output captured.
Passed tests/devhub/test_devhub_home.py::test_devhub_footer_copyright_message[Desktop-Creative Commons License] 5.40
No log output captured.